package apps

import (
	"errors"
	"fmt"
)

var (
	// AppObjs 用来存放注册过来的app
	AppObjs = map[string]AppObj{}
)

// AppObj 管理App的IOC接口
type AppObj interface {
	Name() string
	Init() error
}

// RegisterApp 注册app的方法
func RegisterApp(obj AppObj) {
	//先查找，看看app是否注册过了，没注册才注册，注册过了就直接panic
	if _, ok := AppObjs[obj.Name()]; ok {
		panic(errors.New("app " + obj.Name() + " 已注册过！"))
	} else {
		AppObjs[obj.Name()] = obj
		fmt.Printf("app %s 注册成功。\n", obj.Name())
	}
}

// GetApp 从IOC获取app的方法
func GetApp(appname string) AppObj {
	if v, ok := AppObjs[appname]; ok {
		return v
	} else {
		panic(errors.New("app" + appname + "尚未注册！"))
	}
}
